﻿using System.Text.Json.Serialization;

namespace Sirius.Entity
{
    //论坛对象
    public class Forum
    {
        //话题频道内发表的主帖称为主题
        //该事件在话题频道内新发表主题或删除时生产事件中包含该对象

        //频道ID
        [JsonPropertyName("guild_id")]
        public string guild_Id { get; set; }

        //子频道ID
        [JsonPropertyName("channel_id")]
        public string channel_Id { get; set; }

        //作者ID
        [JsonPropertyName("author_id")]
        public string Author_Id { get; set; }

        //ThreadInfo 主帖内容
        [JsonPropertyName("thread_info")]
        public ThreadInfo Thread_Info { get; set; }
    }

    //主帖内容
    public class ThreadInfo
    {
        //主贴ID
        [JsonPropertyName("thread_id")]
        public string Thread_Id { get; set; }

        //帖子标题
        [JsonPropertyName("title")]
        public string Title { get; set; }

        //帖子内容
        [JsonPropertyName("content")]
        public string Content { get; set; }

        //发表时间
        [JsonPropertyName("date_time")]
        public DateTime DateTime { get; set; }
    }

    public class Post
    {
        //话题频道内对主题的评论称为帖子
        //话题频道内对帖子主题评论或删除时生产事件中包含该对象

        //频道ID
        [JsonPropertyName("guild_id")]
        public string Guild_Id { get; set; }

        //子频道ID
        [JsonPropertyName("channel_id")]
        public string Channel_Id { get; set; }

        //作者ID
        [JsonPropertyName("author_id")]
        public string Author_Id { get; set; }

        //PostInfo 帖子内容
        [JsonPropertyName("post_info")]
        public PostInfo Post_Info { get; set; }
    }

    public class PostInfo
    {
        //帖子事件包含的帖子内容信息
        //主题ID
        [JsonPropertyName("thread_id")]
        public string Thread_Id { get; set; }

        //帖子ID
        [JsonPropertyName("post_id")]
        public string Post_Id { get; set; }

        //帖子内容
        [JsonPropertyName("content")]
        public string Content { get; set; }

        //评论时间
        [JsonPropertyName("data_time")]
        public DateTime date_Time { get; set; }
    }

    public class Reply
    {
        //话题频道对帖子回复或删除时生产该事件中包含该对象
        //话题频道内对帖子的评论称为回复
        //频道ID
        [JsonPropertyName("guild_id")]
        public string Guild_Id { get; set; }

        //子频道ID
        [JsonPropertyName("channel_id")]
        public string Channel_Id { get; set; }

        //作者ID
        [JsonPropertyName("作者ID")]
        public string Author_Id { get; set; }

        //ReplyInfo回复内容
        [JsonPropertyName("reply_info")]
        public ReplyInfo reply_Info { get; set; }
    }

    public class ReplyInfo
    {
        //回复事件包含的回复内容信息
        //主题ID
        [JsonPropertyName("thread_id")]
        public string Thread_Id { get; set; }

        //帖子id
        [JsonPropertyName("post_id")]
        public string post_Id { get; set; }

        //回复ID
        [JsonPropertyName("reply_id")]
        public string Reply_Id { get; set; }

        //回复内容
        [JsonPropertyName("content")]
        public string Content { get; set; }

        //回复时间
        [JsonPropertyName("date_time")]
        public string Date_Time { get; set; }
    }

    public class AuditResult
    {
        //频道ID
        [JsonPropertyName("guild_id")]
        public string Guild_Id { get; set; }

        //子频道ID
        [JsonPropertyName("channel_id")]
        public string channel_Id { get; set; }

        //作者ID
        [JsonPropertyName("author_id")]
        public string author_Id { get; set; }

        //主题ID
        [JsonPropertyName("thread_id")]
        public string thread_Id { get; set; }

        //帖子ID
        [JsonPropertyName("post_id")]
        public string Post_Id { get; set; }

        //回复ID
        [JsonPropertyName("reply_id")]
        public string Reply_Id { get; set; }

        //AuditType审核的类型
        [JsonPropertyName("type")]
        public int Type { get; set; }

        //审核结果.0:成功 1:失败
        [JsonPropertyName("result")]
        public int Result { get; set; }

        //result不为0时错误信息
        [JsonPropertyName("err_msg")]
        public string Err_Msg { get; set; }
    }

    //审核的类型
    public enum AuditType
    {
        //帖子
        PUBLISH_THREAD = 1,

        //评论
        PUBLISH_POST = 2,

        //回复
        PUBLISH_REPLY = 3,
    }

    //富文本内容
    public class RichObject
    {
        //RichType富文本类型
        [JsonPropertyName("type")]
        public int Type { get; set; }

        //TextInfo 文本
        [JsonPropertyName("text_info")]
        public TextInfo text_Info { get; set; }

        //AtInfo @内容
        [JsonPropertyName("at_info")]
        public AtInfo at_Info { get; set; }

        //URLInfo连接
        [JsonPropertyName("url_info")]
        public URLInfo url_Info { get; set; }

        //EmojiInfo表情
        [JsonPropertyName("emoji_info")]
        public EmojiInfo emoji_Info { get; set; }

        //ChannelInfo 提到的子频道
        [JsonPropertyName("channel_info")]
        public ChannelInfo channel_Info { get; set; }
    }

    //富文本类型
    public enum RichType
    {
        //普通文本
        TEXT = 1,
        
        //at信息
        AT = 2,

        //url信息
        URL = 3,

        //表情
        EMOJI = 4,

        //#子频道
        CHANNEL = 5,

        //视频
        VIDEO = 10,

        //图片
        IMAGE = 11
    }

    //富文本 - 普通文本
    public class TextInfo
    {
        //普通文本
        [JsonPropertyName("text")]
        public string Text { get; set; }
    }

    //富文本 - @内容
    public class AtInfo
    {
        //at类型
        [JsonPropertyName("type")]
        public int at_Type { get; set; }

        //用户
        [JsonPropertyName("user_info")]
        public AtUserInfo user_info { get; set; }

        //角色组信息
        [JsonPropertyName("role_info")]
        public AtRoleInfo role_Info { get; set; }

        //频道信息
        [JsonPropertyName("guild_info")]
        public AtGuildInfo guild_Info { get; set; }
    }
    //@的类型
    public enum AtType
    {
        //at特定人
        AT_EXPLICIT_USER = 1,

        //at角色组所有人
        AT_ROLE_GROUP = 2,

        //at频道所有人
        AT_GUILD = 3
    }

    //@用户信息
    public class AtUserInfo
    {
        //身份组ID
        [JsonPropertyName("id")]
        public string Id { get; set; }

        //用户昵称
        [JsonPropertyName("nick")]
        public string Nick { get; set; }
    }

    //@身份组信息
    public class AtRoleInfo
    {
        //身份组id
        [JsonPropertyName("role_id")]
        public UInt64 role_Id { get; set; }

        //身份组昵称
        [JsonPropertyName("name")]
        public string Name { get; set; }

        //颜色值
        [JsonPropertyName("color")]
        public UInt32 Color { get; set; }
    }

    //@频道信息
    public class AtGuildInfo
    {
        //频道ID
        [JsonPropertyName("guild_id")]
        public string guild_id { get; set; }
        //频道昵称
        [JsonPropertyName("guild_name")]
        public string guild_Name { get; set; }
    }

    //富文本 - 链接信息
    public class URLInfo
    {
        //链接地址
        [JsonPropertyName("url")]
        public string url { get; set; }
    
        //链接显示文本
        [JsonPropertyName("display_text")]
        public string display_Text { get; set; }
    }

    //富文本-Emoji信息
    public class EmojiInfo
    {
        //表情ID
        [JsonPropertyName("id")]
        public string Id { get; set; }

        //表情类型
        [JsonPropertyName("type")]
        public string Type { get; set; }

        //名称
        [JsonPropertyName("name")]
        public string Name { get; set; }

        //链接
        [JsonPropertyName("url")]
        public string Url { get; set; }
    }

    //富文本 - 子频道信息
    public class ChannelInfo
    {
        //子频道ID
        [JsonPropertyName("channel_id")]
        public UInt64 channel_Id { get; set; }

        //子频道昵称
        [JsonPropertyName("channel_name")]
        public string channel_Name { get; set; }
    }

    //富文本内容
    public class RichText
    {
        //段落，一段落一行，
        //段落内无元素的为空行
        [JsonPropertyName("paragraphs")]
        public Paragraph Paragraphs { get; set; }
    }
    public class Paragraph
    {
        //元素列表
        [JsonPropertyName("elems")]
        public Elem elems { get; set; }

        //段落属性
        [JsonPropertyName("props")]
        public ParagraphProps Props { get; set; }
    }

    //富文本 - 元素列表结构
    public class Elem
    {
        //文本元素
        [JsonPropertyName("text")]
        public TextElem Text { get; set; }

        //图片元素
        [JsonPropertyName("image")]
        public ImageElem Image { get; set; }

        //视频元素
        [JsonPropertyName("video")]
        public VideoElem Video{get;set;}

        //URL元素
        [JsonPropertyName("url")]
        public URLElem Url { get; set; }

        //元素类型
        [JsonPropertyName("type")]
        public ElemType Type { get; set; }
    }

    //元素类型
    public enum ElemType
    {
        //文本
        ELEM_TYPE_TEXT = 1,

        //图片
        ELEM_TYPE_IMAGE = 2,
        
        //视频
        ELEM_TYPE_VIDEO = 3,

        //URL
        ELEM_TYPE_URL = 4
    }

    //富文本 - 文本属性
    public class TextElem
    {
        //正文
        [JsonPropertyName("text")]
        public string Text { get; set; }

        //文本属性
        [JsonPropertyName("props")]
        public TextProps Props { get; set; }
    }

    //富文本- 文本段落属性
    public class TextProps
    {
        //加粗
        [JsonPropertyName("font_bold")]
        public bool Font_Bold { get; set; }

        //斜体
        [JsonPropertyName("italic")]
        public bool Italic { get; set; }

        //下划线
        [JsonPropertyName("underline")]
        public bool UnderLine { get; set; }
    }

    //富文本 - 图片属性
    public class ImageElem
    {
        //第三方图片链接
        [JsonPropertyName("third_url")]
        public string third_Url { get; set; }

        //宽度比例(放比，在屏幕里显示的比例)
        [JsonPropertyName("width_percent")]
        public double Width_Percent { get; set; }
    }

    //富文本 - 平台图片属性
    public class PlatImage
    {
        //架平图片链接
        [JsonPropertyName("url")]
        public string Url { get; set; }

        //图片宽度
        [JsonPropertyName("width")]
        public UInt32 Width { get; set; }

        //图片高度
        [JsonPropertyName("height")]
        public UInt32 Height { get; set; }

        //图片ID
        [JsonPropertyName("image_id")]
        public string Image_Id { get; set; }
    }

    //富文本 - 视频属性
    public class VideoElem
    {
        //第三方视频文件链接
        [JsonPropertyName("third_url")]
        public string Third_Url { get; set; }
    }

    //富文本 - 平台视频属性
    public class PlatVideo
    {
        //架平图片链接
        [JsonPropertyName("url")]
        public string Url { get; set; }

        //图片宽度
        [JsonPropertyName("width")]
        public UInt32 Width { get; set; }

        //图片高度
        [JsonPropertyName("height")]
        public UInt32 Height { get; set; }
        
        //视频id
        [JsonPropertyName("video_id")]
        public string Video_ID { get; set; }

        //视频时长
        [JsonPropertyName("duration")]
        public UInt32 Duration { get; set; }
        
        //视频封面属性
        [JsonPropertyName("cover")]
        public PlatImage Cover { get; set; }
    }

    //富文本-url属性
    public class URLElem
    {
        //URL链接
        [JsonPropertyName("url")]
        public string Url { get; set; }

        //URL描述
        [JsonPropertyName("desc")]
        public string Desc { get; set; }
    }

    //富文本 - 段落属性
    public class ParagraphProps
    {
        //段落对齐方向属性，
        //数值可以参考Alignment
        [JsonPropertyName("alignment")]
        public Int32 Alignment { get; set; }

    }

    //段落对齐方向s属性
    public enum Alignment
    {
        //左对齐
        ALIGNMENT_LEFT = 0,

        //居中
        ALIGNMENT_MIDDLE = 1,

        //右对齐
        ALIGNMENT_RIGH = 2
    }
}